package twoD.hofem;

/**
 * A function [a, b] -> R^n.
 * 
 * @author Matthias Baitsch
 */
public interface FunctionRToRn {

	/**
	 * Returns the interval representing the domain on which the function is
	 * defined.
	 * 
	 * @return the domain
	 */
	public Interval getDomain();

	/**
	 * Returns the dimension of the range space.
	 * 
	 * @return n
	 */
	public int getN();

	/**
	 * Evaluates the tangent at the specified point.
	 * 
	 * @param x
	 *            point
	 * @return the tangent (array of length n)
	 */
	public double[] tangentAt(double x);

	/**
	 * Computes the function value at the specified point
	 * 
	 * @param x
	 *            point
	 * @return the function value (array of length n)
	 */
	public double[] valueAt(double x);
}
